package itsm.isperp.framework.service;

import itsm.isperp.framework.domain.IRole;
import itsm.isperp.framework.domain.IUser;
import itsm.isperp.framework.security.domain.RoleResource;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 系统的角色服务接口
 */
public interface IRoleService {
	/**
	 * 根据角色ID找到对应的角色对象
	 * 
	 * @param id
	 *            角色ID
	 * @return Role找到的角色对象
	 */
	public IRole findRoleById(String id);

	/**
	 * 根据给定的资源类型，找到所有已与角色对应的资源
	 * 
	 * @param type
	 *            有三种类型：URL（U）、组件（C）、模块ID（M）
	 * @return Collection<ResourceRole> ResourceRole集合
	 */
	public Collection<? extends RoleResource> findResourceRolesByRole(
			String roleId);

	/**
	 * 根据用户名找到该用户所拥有角色集合
	 * 
	 * @param username
	 *            用户名
	 * @return Collection<Role> 当前用户所拥有的角色集合
	 */
	public Collection<? extends IRole> findRolesByUsername(String username);

	/**
	 * 取得角色下所有人员的指定列的Map列表
	 * 
	 * @param roleId
	 *            角色ID
	 * @param selectColumns
	 *            指定列数组
	 * @return 指定列的Map列表
	 */
	public List<Map<String, Object>> findRoleMembers(String roleId,
			String... selectColumns);

	/**
	 * 取得指定角色下的所有用户帐户
	 * 
	 * @param roleId
	 *            角色ID
	 * @return 人员列表
	 */
	public List<? extends IUser> findRoleMembers(String roleId);

	/**
	 * 取得指定角色下的所有用户帐户
	 * 
	 * @param roleId
	 *            角色ID
	 * @return 人员列表
	 */
	public List<? extends IRole> findAllRoles();
}
